package com.fno.back.common.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.Base64;

/***
 * @des
 * @author Ly
 * @date 2022/7/16
 */

public class Base64Util {

    /****
     * 字节转base64
     * @param byteArray
     * @return
     */
    public static String byte2Base64(byte [] byteArray){
        return Base64.getEncoder().encodeToString(byteArray);
    }


    //public static void main(String[] args) {
    //    String str = "";
    //    generateImage(str,"temp.png","D:/");
    //}

    /*****
     * base64转文件
     * @param base64Str
     * @param fileName
     * @param savePath
     * @return
     */
    public static String generateImage(String base64Str, String fileName,String savePath) {
        // 解密
        try {
            // 项目绝对路径
            // 图片分类路径+图片名+图片后缀
            //String imgClassPath = path.concat(UUID.randomUUID().toString()).concat(".jpg");
            // 解密
            Base64.Decoder decoder = Base64.getDecoder();
            // 去掉base64前缀 data:image/jpeg;base64,
            base64Str = base64Str.substring(base64Str.indexOf(",", 1) + 1, base64Str.length());
            byte[] b = decoder.decode(base64Str);
            // 处理数据
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            File tempFile = new File(savePath);
            //判断文件目录是否存才 不存在创建 避免OutputStream发现不存在报异常
            if (!tempFile.exists()) {

                tempFile.mkdirs();

            }
            // 保存图片
            OutputStream out = new FileOutputStream(tempFile.getPath()+File.separator+fileName);
            out.write(b);
            out.flush();
            out.close();
            // 返回图片的相对路径 = 图片分类路径+图片名+图片后缀
            return fileName;
        } catch (IOException e) {
            return null;
        }
    }





    /****
     * 通过base64计算文件大小
     * @param fileBase64Str
     * @return
     */
    public static BigDecimal getFileSizeFromBase64(String fileBase64Str)
    {
        int padding = 0;
        if (fileBase64Str.endsWith("=="))
        {
            padding = 2;
        }
        else if(fileBase64Str.endsWith("="))
        {
            padding = 1;
        }
        int fileSize = fileBase64Str.length() * 3 / 4 - padding;
        BigDecimal size = new BigDecimal(fileSize);
        return size;
    }
}
